陣列與物件是 JavaScript 內建的資料結構,當提到一個資料結構的好壞時,我們會評斷操作該資料結構時所用的各個方法 (新增、刪除、存取或修改、查詢) 所需的時間與空間複雜度。
這邊的搜尋是指找物件內特定值:
const person = {
  name: 'Jason',
  age: 18,
  city: 'Taipei'
}
搜尋 18 這個值就需要遍歷這個物件,所以時間複雜度是 O(n)。
至於其他操作都是透過物件的鍵值 (Key) 直接存取,所以時間複雜度是 O(1)。
Object.keys, Object.values 和 Object.entries 都是遍歷物件的方法,所以時間複雜度是 O(n)。
Object.hasOwnProperty 是檢查物件內是否有特定的 Key ,直接存取即可,所以時間複雜度是 O(1)。
Object.assign 在合併物件時也會需要遍歷物件,時間複雜度是 O(n)。
存取陣列內特定值是用 Index 直接存取,跟物件使用 Key 是一樣的。
而新增或刪除的時間複雜度依照操作的位置決定:
const array = ['Jason', 'John', 'Mike']
array.push('Tom')
console.log(array) // ['Jason', 'John', 'Mike', 'Tom']
array.shift('Jason') // ['John', 'Mike', 'Tom']
由上面範例可以看出,新增或刪除在最後一個位置時,陣列內其他元素的 Index 不會改變,所以時間複雜度是 O(1)。
但若在最後一個位置以外,則會改變陣列內其他元素的 Index ,所以時間複雜度是 O(n)。
影響陣列內元素的排列,或是遍歷陣列內元素相關的都是 O(n)。
push, pop 就如上段提到的是操作最後一個位置,沒有影響其他元素排列,所以時間複雜度是 O(1)。
sort 部分在之後的排序章節會有詳細說明。